package com.sse.lb.core;

/**
 * Interfaz que define el comportamiento del componente 
 * para las reglas de enrutamiento de tramas.
 * @author Paul
 *
 */
public interface IReglasEnrutamiento {
	
	/**
	 * Registra un nuevo sistema central para el registro
	 * de la cantidad de tramas atentidas. 
	 * Despues de invocar este metodo, exite un nuevo sistema registrado
	 * con 0 tramas atentidas.
	 * @param idSistemaCentral
	 */
	public void registrarSistemaCentral(long idSistemaCentral);
	
	/**
	 * Aumenta en uno la cantidad de tramas atendidas para un 
	 * sistema central.
	 * @param idSistemaCentral Identificador unico del sistema central.
	 */
	public void adicionarUnaTrama(long idSistemaCentral);
	
	/**
	 * Disminuye en uno la cantidad de tramas atendidas para un 
	 * sistema central.
	 * @param idSistemaCentral Identificador unico del sistema central.
	 */
	public void removerUnaTrama(long idSistemaCentral);
	
	
	/**
	 * Elimina un sistema central de las reglas de enrutamiento.
	 * Despues de esto no es posible obtener el sistema central para 
	 * el envio de mensajes sin antes volverlo a registrar.
	 * @param idSistemaCentral
	 */
	public void eliminarSistemaCentral(long idSistemaCentral);
	
	
	/**
	 * Retorna el identificador del sistema central registrado con 
	 * menor carga de tramas.
	 * @return Identificador del sistema central registrado con 
	 * menor carga de tramas. 
	 */
	public long obtenerSistemaMenosCargado();
	
	
	

}
